package com.groep14.manager;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import org.springframework.web.servlet.ModelAndView;

import com.groep14.model.Store;
import com.groep14.project.Connectie;
import com.groep14.project.MyLogger;

/**
 * De VerkooppuntManager beheert de ModalAndView van de verkooppunten pagina.
 *
 * @since r40 - 6 April 2012
 * @author Maarten Tutak
 *
 */

public class VerkooppuntManager {

	private ModelAndView modelAndView = new ModelAndView("verkooppunten");
	private MyLogger myLogger = new MyLogger();
	
	/**
	 * Constructor van de VerkooppuntManager, we zoeken adhv een productID de verkooppunten van dit product op.
	 * @param productID
	 */
	public VerkooppuntManager(int productID) {
		
		try {
			Connectie con = new Connectie();
			ResultSet result;
			ArrayList<Store> stores = new ArrayList<Store>();
			
			//Alle winkels selecteren die het product verkopen.
			con.setpStatement(con.getCon().prepareStatement("SELECT p.store_id, p.price,s.Name,s.Address,s.Phone,s.Zip,c.City,s.Website FROM products_in_stores p JOIN Stores s ON p.store_id = s.store_id JOIN City c ON s.zip = c.zip WHERE EAN_UCC_13 = ?"));
			con.getpStatement().setInt(1, productID);
			
			result = con.getpStatement().executeQuery();
			
			//We kunnen meerdere winkels verwachten --> while loop
			while(result.next()) {
				
				Store s = new Store();
				s.setStore_id(result.getInt("Store_id"));
				s.setName(result.getString("Name"));
				s.setAddress(result.getString("Address"));
				s.setPhone(result.getString("Phone"));
				s.setZip(result.getInt("Zip"));
				s.setWebsite(result.getString("Website"));
				s.setCity(result.getString("City")); // --> Stad word toegevoegd aan store model
				s.setPrijs(result.getFloat("Price")); // --> Prijs word toegevoegd aan store model
				
				stores.add(s);			
			}
			
			if(stores.size() == 0) {
				modelAndView.addObject("noStores", true);
			}else {
				modelAndView.addObject("stores", stores);
			}
			
		} catch (SQLException e) {
			myLogger.logException(getClass() + " - ", e);
		} catch (ClassNotFoundException e) {
			myLogger.logException(getClass() + " - ", e);
		} catch (InstantiationException e) {
			myLogger.logException(getClass() + " - ", e);
		} catch (IllegalAccessException e) {
			myLogger.logException(getClass() + " - ", e);
		}
		
		modelAndView.addObject("productID", productID);
		
	}

	/**
	 * ModalAndView getter
	 * @return modelAndView
	 */
	public ModelAndView getModelAndView() {
		return modelAndView;
	}

	/**
	 * ModalAndView setter
	 * @param modelAndView
	 */
	public void setModelAndView(ModelAndView modelAndView) {
		this.modelAndView = modelAndView;
	}
	
}
